// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.google.zxing.common.detector; import com.google.zxing.NotFoundException; import com.google.zxing.ResultPoint; import com.google.zxing.common.BitMatrix; public final class MonochromeRectangleDetector { private static final int a = 32; private final BitMatrix b; public MonochromeRectangleDetector(BitMatrix bitmatrix) { b = bitmatrix; } private ResultPoint a(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2) { int j2 = i; int k2 = i1; int ai[] = null; int l2; for (; k2 < l1 && k2 >= k1 && j2 < l && j2 >= k; k2 = l2) { int ai1[]; if (j == 0) { ai1 = a(k2, i2, k, l, true); } else { ai1 = a(j2, i2, k1, l1, false); } if (ai1 == null) { if (ai == null) { throw NotFoundException.getNotFoundInstance(); } if (j == 0) { int j3 = k2 - j1; if (ai[0] < i) { if (ai[1] > i) { float f2; if (j1 > 0) { f2 = ai[0]; } else { f2 = ai[1]; } return new ResultPoint(f2, j3); } else { return new ResultPoint(ai[0], j3); } } else { return new ResultPoint(ai[1], j3); } } int i3 = j2 - j; if (ai[0] < i1) { if (ai[1] > i1) { float f = i3; float f1; if (j < 0) { f1 = ai[0]; } else { f1 = ai[1]; } return new ResultPoint(f, f1); } else { return new ResultPoint(i3, ai[0]); } } else { return new ResultPoint(i3, ai[1]); } } l2 = k2 + j1; j2 += j; ai = ai1; } throw NotFoundException.getNotFoundInstance(); } private int[] a(int i, int j, int k, int l, boolean flag) { int i1; int j1; i1 = k + l >> 1; j1 = i1; _L9: if (j1 < k) goto _L2; else goto _L1 _L1: int k1; int l1; int l2; if (flag ? b.get(j1, i) : b.get(i, j1)) { j1--; continue; /* Loop/switch isn't completed */ } int i3; for (l2 = j1; --l2 >= k && (flag ? !b.get(l2, i) : !b.get(i, l2));) { } i3 = j1 - l2; if (l2 >= k && i3 <= j) goto _L3; else goto _L2 _L2: k1 = j1 + 1; l1 = i1; _L7: if (l1 < l) { break MISSING_BLOCK_LABEL_122; } goto _L4 _L3: j1 = l2; continue; /* Loop/switch isn't completed */ int j2; if (flag ? b.get(l1, i) : b.get(i, l1)) { l1++; continue; /* Loop/switch isn't completed */ } int i2; int k2; for (j2 = l1; ++j2 < l && (flag ? !b.get(j2, i) : !b.get(i, j2));) { } k2 = j2 - l1; if (j2 < l && k2 <= j) goto _L5; else goto _L4 _L4: i2 = l1 - 1; if (i2 > k1) { return (new int[] { k1, i2 }); } break; /* Loop/switch isn't completed */ _L5: l1 = j2; if (true) goto _L7; else goto _L6 _L6: return null; if (true) goto _L9; else goto _L8 _L8: } public ResultPoint[] detect() { int i = b.getHeight(); int j = b.getWidth(); int k = i >> 1; int l = j >> 1; int i1 = Math.max(1, i / 256); int j1 = Math.max(1, j / 256); int k1 = -1 + (int)a(l, 0, 0, j, k, -i1, 0, i, l >> 1).getY(); ResultPoint resultpoint = a(l, -j1, 0, j, k, 0, k1, i, k >> 1); int l1 = -1 + (int)resultpoint.getX(); ResultPoint resultpoint1 = a(l, j1, l1, j, k, 0, k1, i, k >> 1); int i2 = 1 + (int)resultpoint1.getX(); ResultPoint resultpoint2 = a(l, 0, l1, i2, k, i1, k1, i, l >> 1); int j2 = 1 + (int)resultpoint2.getY(); return (new ResultPoint[] { a(l, 0, l1, i2, k, -i1, k1, j2, l >> 2), resultpoint, resultpoint1, resultpoint2 }); } }